package gitlet;

import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import java.util.List;

/**
 * @author 陈恒康
 * @Description ViewMenu类是JMenu的子类，用于创建一个包含多个菜单项的菜单。这个菜单包含"Status"、"Find"、"Log"和"Global"四个菜单项。每个菜单项都有一个关联的动作监听器，当点击菜单项时，会执行相应的操作。
 * @date 2023/12/19
 */
public class ViewMenu extends JMenu {

    /**
     * @param repository 与菜单项相关联的仓库对象
     * @Description 构造一个新的ViewMenu对象。该对象包含"Status"、"Find"、"Log"和"Global"四个菜单项。每个菜单项都有一个关联的动作监听器，当点击菜单项时，会执行相应的操作。
     * @author 陈恒康
     * @date 2023/12/19
     */
    public ViewMenu(Repository repository) {
        super("View");
        JMenuItem status = new JMenuItem("Status");
        JMenuItem log = new JMenuItem("Log");
        JMenuItem globalLog = new JMenuItem("Global");
        JMenuItem find = new JMenuItem("Find");
        this.add(status);
        this.add(find);
        this.add(log);
        this.add(globalLog);
        status.addActionListener(e -> {
            if (repository != null)
                repository.status();
        });
        /**
         * @Description 为globalLog菜单项添加了一个动作监听器。当用户点击globalLog菜单项时，如果仓库不为空，会显示全局日志。
         * @date 2023/12/19
         */
        globalLog.addActionListener(e -> {
            if (repository != null)
                repository.globalLog();
        });
        /**
         * @Description 为find菜单项添加了一个动作监听器。当用户点击find菜单项时，会显示所有的提交消息和ID，然后弹出一个对话框让用户输入查询信息，然后在仓库中查找与输入的信息匹配的提交。如果用户没有输入任何信息，会显示一个错误消息。
         * @date 2023/12/19
         */
        find.addActionListener(e -> {
            System.out.println("CommitMessage和ID如下:");
            List<String> list = repository.getAllCommitMsgId();
            for (String msg : list)
                System.out.println(msg);
            String input = JOptionPane.showInputDialog("请输入查询信息");
            if (input == null || input.isEmpty()) {
                JOptionPane.showMessageDialog(null, "请输入Message!", "提示信息:", JOptionPane.ERROR_MESSAGE);
                return;
            }
            repository.find(input);
        });
        /**
         * @Description 为log菜单项添加了一个动作监听器。当用户点击log菜单项时，如果仓库不为空，会显示日志。
         * @date 2023/12/19
         */
        log.addActionListener(e -> {
            if (repository != null)
                repository.log();
        });
    }
}